home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 6
/
FM Towns Free Software Collection 6.iso
/
data
/
ysuty2
/
ysuty2.doc
< prev
next >
Wrap
Text File
|
1993-07-08
|
47KB
|
1,575 lines
☆☆☆☆ YS-11 Graphic User Interface Library 2 V1.0 ☆☆☆☆
by YS-11
0.概要
1.使用方法
2.GUI関数について
GUI関数で扱う部品について
3.文字列へのポインタの配列について
4.関数の説明
簡略化EGBコールライブラリ
◆YGB_box
◆YGB_boxFul
◆YGB_circle
◆YGB_cls
◆YGB_color
◆YGB_fontSize
◆YGB_frame
◆YGB_getColor
◆YGB_getPattern
◆YGB_init
◆YGB_initNoCls
◆YGB_line
◆YGB_linec
◆YGB_lined
◆YGB_polygon
◆YGB_popCondition
◆YGB_print
◆YGB_pset
◆YGB_pushCondition
◆YGB_putPattern
◆YGB_use12dotFont
◆YGB_view
◆YGB_writeMode
◆YGB_writePage
文字列操作関数
◆YSC_arguments
◆YSC_lineHead
◆YSC_lineTail
◆YSC_swap
ファイル操作関数
◆YSC_changeExt
◆YSC_fsize
◆YSC_getDosFiles
◆YSC_makeFullPath
◆YSC_putExt
◆YSC_sortFiles
EUPHONY FILE 演奏用関数
◆YEU_abort
◆YEU_pause
◆YEU_percent
◆YEU_play
◆YEU_playFlag();
◆YEU_prepare
◆YEU_restart
GUI関数
◆YGU_addLateralbar
◆YGU_addLongitudinalbar
◆YGU_addButton
◆YGU_addButtonSwitch
◆YGU_addDialogue
◆YGU_addMenu
◆YGU_addPullDownMenu
◆YGU_allItemsAction
◆YGU_buttonSwitchOff
◆YGU_buttonSwitchOn
◆YGU_checkDoubleClick
◆YGU_deleteAll
◆YGU_deleteItem
◆YGU_dispVector
◆YGU_getButton
◆YGU_getDialogue
◆YGU_getMenu
◆YGU_getPullDown
◆YGU_getScrollBarPointer
◆YGU_getSwitch
◆YGU_itemSerialNumber
◆YGU_menuBox
◆YGU_menuLine
◆YGU_nextItem
◆YGU_popScreenBlock
◆YGU_pushScreenBlock
◆YGU_previousItem
◆YGU_repaintDialogue
◆YGU_resetDialogue
◆YGU_resetScrollBar
◆YGU_screenMode
◆YGU_setDialoguePointer
◆YGU_setScrollBarPointer
拡張GUIライブラリ
◆YGU_intInput
◆YGU_lineInput
◆YGU_lineInputKanji
◆YGU_fileSelect
◆YGU_paraFileSelect
GUI/拡張GUIライブラリでの考えられるトラブルについて
0.概要
これは、先に発表した、 YSUTY.LIBでここが良かった、とかあそこが悪かった、
とか、自分で使ってみて感じた所を、大幅機能強化&修正したバージョンです。
なお、このライブラリは、High-Cに標準添付のライブラリにかぶさる形をとっ
ていますので、そんなに超高速では動きません。でも、遅くはないです。(^_^;)
また、定義ファイルを解析したり、ディレクトリにあるファイル名を拾って来
る関数も入っています。これらは、自分でしょっちゅう使っている関数で、ライ
ブラリを分けると、リンクが面倒だと思ったので入っているだけで、それらを使
わなくてもこのライブラリのメインであるGUI関数を使用することは可能です。
この関数には、その他、EGBのオペレーションを使う場合、最初の設定が多
くて面倒だし、一本の直線を引くにも配列を確保してその中に2点の情報を書き
込んで・・・・と長々と書かなくてはならず、多少わずらわしい感があります。
もちろん、これは、EGBの持つ機能を隅々まで使うためにこうなっているので
すが、まぁ、そこまでは通常は使わないだろう、ということで、大幅に簡略化し
たグラフィックの関数が入っています。
また、前回のYSUTY.LIB では、メニュー関数等は呼び出して、結果が返って来
るまで、別なことが出来ないため、メニューが表示されている時に、別なところ
をダブルクリックすると何かがおこる、といった細かいことはできませんでした
が、このYSUTY2.LIBでは、ループの先頭でメニュー等を動作させる関数を呼ぶ、
という方法で、それが可能になっています。
その他、特徴としては、ライブラリの中で、複雑なことは一切やっておりませ
んので、TBIOS.LIB の関数とかちあって誤動作したりすることはまずありません。
ただし、唯一の例外は、EGBの関数を使っている時に、GUIライブラリを呼ぶと、
返ってきた時には、ビューポート、カラー、書き込みモード等が変更されている
可能性があります(特にビューポートは要注意)。ただし、これらは、グラフィ
ックオペレーションに、このライブラリに入っているグラフィックルーチンを使
っている限りはなんの問題もありません。マウス読み取り関係さえ、MOS_rdpos
しか使ってませんので、マウスバイオスのオペレーションとのかちあいも無いと
思います。
High-Cを買ったら財布が空になったような方はどうぞ(^_^;)
<<アップデート>>
1993/02/12 フリコレ応募バージョンのつもりだった(^_^;)
1993/02/20 YGB_initの一部の画面モードの初期設定が正しく行われないバグを修正。
YGB_circleで、paintMode を設定するのを忘れてたバグを修正。
YGB_colorで、画面モードによって正しく設定されないバグを修正。
1993/02/21 ファイルセレクタのワイルドカードの処理の障害を修正
これが本当のフリコレ応募バージョン
☆☆☆ ここでV1.0とします ☆☆☆
1.使用方法
YSUTY2.LIBを使用するためには、ソースプログラムの先頭で、ヘッダファイル
YSUTY2.Hをインクルードしてください。ライブラリファイル名は、YSUTY2.LIBで
すので、リンク時に指定するのも忘れないでください。また、一部の関数では、
拡張ライブラリIに対応していて、12ドットフォントや漢字入力をすることが可
能です。それらを利用する時は、拡張ライブラリIのT_OS.LIBをリンクするのも
忘れないでください。
2.GUI関数について
GUI関数を使う場合で、その他のグラフィック描画にこのライブラリ内の関
数を使わずに、 TBIOS.LIBの関数を直接使用している場合は、GUI関数を呼ぶ
たびに、描画モード,ビューポート等が変更されますので、注意してください。
このライブラリ内のグラフィック関数のみ使用の場合は問題はありません。
これらの関数では、画面上にあるボタン、ポップアップメニュー等の部品をそ
れぞれITEM型として扱います。ITEM型は、YSUTY2.Hの中で定義されている構造体
です。
ITEM型を実際に使用する時は、ITEMリストを作ります。ITEMリストを作るには
ITEM型のポインタをひとつ用意して、先頭のITEMを登録します。メモリはライブ
ラリ側でmallocを呼び出して勝手に割り振られます。そして、そのITEMに追加す
る、という形でGUIリストを作成することができます。
なお、ITEMリストは複数存在しても構いませんが、1ループにつき、1ITEMリ
ストでなくてはなりません。
例えば、次のようにします。各関数の具体的な意味については、後の章を参照
してください。
void Function()
{
ITEM *top;
top=YGU_addButton(NULL,304,0,16,16); /* 先頭のアイテムだからNULL */
YGU_addButton(top,304,32,40,16); /* 以下は、 */
YGU_addButtonSwitch(top,304,48,40,16); /* topに続く */
}
こうすると、3つのボタンが登録されます。
また、登録されたITEMは、先頭が1番で、以下、2、3・・・と通し番号が付
きます。
そして、次に、登録したITEMがユーザーから何か操作されたかどうかの判別は、
ループの先頭で、関数YGU_allItemsActionをコールすることで行います。この関
数は、 topから始まってそれに追加されていったアイテム全てに対して、マウス
でクリックされた場合等をチェックして、変化があったITEMへのポインタを返し
ます。もしも、何の変化も無かった場合は、NULLが返ってきます。
ライブラリを使用するプログラムでは、ITEMへのポインタから、直接n番目で
あるという情報を得ることは出来ませんが、関数YGU_itemSerialNumberで、番号
を得ることが出来ます。これを利用して、switch~case文で、反応があったボタ
ンに対応した動作をさせることが可能です。
注意することは、ITEMを登録した関数から抜ける場合は、必ず、YGU_deleteAll
を使って登録したITEMを消さなくてはならないということです。これを怠ると、
プログラムが最初はうまく動いているように見えますが、途中で突然動かなくな
るという悲劇が生まれる危険があります。
ITEMの動作部分の例を挙げておきます。
int inum;
ITEM *act,*top;
/* 登録とかなんかが入る */
top=YGU_addButton( ……
/* ここからがメインループ。*/
act=NULL; /* 個人的にdo~whileが嫌いだから、ここで初期化(^_^;) */
while(act!=top) /* topにはEXITのボタンが登録されていると仮定 */
{
act=YGU_allItemsAction(top);
inum=YGU_itemSerialNumber(top,act); /* 意味は後の章を参照ね */
switch(inum)
{
case 1:
break; /* EXITなんだから何もしない */
case 2:
:
:
break; /* 2番のITEMに対応した動作 */
}
}
YGU_deleteAll(top);
GUI関数で扱う部品の説明
┏━━━━━━┯━━━━━━━┯━━━━━━┯━━━━━┯━━━━━━━━┓
┃名称 │Active条件 │動作 │表示 │初期表示 ┃
┣━━━━━━┿━━━━━━━┿━━━━━━┿━━━━━┿━━━━━━━━┫
┃ボタン │マウスのボタン│なし │ボタン押下│呼出し元 ┃
┃ │を放した瞬間 │ │中反転 │ ┃
┠──────┼───────┼──────┼─────┼────────┨
┃スイッチ │マウスのボタン│On/Offが切り│Onで反転 │呼出し元 ┃
┃ │を押した瞬間 │替わる │Offで普通 │ ┃
┠──────┼───────┼──────┼─────┼────────┨
┃PullDownMenu│マウスのボタン│プルダウンメ│メニュー │呼出し元 ┃
┃ │を押した瞬間 │ニューを表示│表示中は │(出てくるメニュ ┃
┃ │ │して選択 │反転 │ーはライブラリ) ┃
┠──────┼───────┼──────┼─────┼────────┨
┃メニュー │マウスのボタン│選ばれた項目│ボタン押下│ライブラリ ┃
┃ │を放した瞬間 │番号を構造体│時反転 │ ┃
┃ │ │にセット │ │ ┃
┠──────┼───────┼──────┼─────┼────────┨
┃ダイアログ │ダブルクリック│選ばれた項目│選択されて│ライブラリ ┃
┃ │またはボタンが│に対応するフ│いる項目は│ ┃
┃ │放された瞬間 │ラグをセット│反転 │ ┃
┃ │ │ │ │ ┃
┠──────┼───────┼──────┼─────┼────────┨
┃縦ScrollBar │ボタンが押され│新カーソル位│カーソル位│ライブラリ ┃
┠──────┤ている間 │置を構造体に│置が変化し│ ┃
┃横ScrollBar │ │セット │た時に書換│ ┃
┃ │ │ │え │ ┃
┗━━━━━━┷━━━━━━━┷━━━━━━┷━━━━━┷━━━━━━━━┛
3.文字列へのポインタの配列について
GUI関数等で、しばしば、文字列へのポインタの配列を扱います。具体的には、
char *a[]={"YS11","loves","Blue Impulse.",NULL};
という形態になります。文字列へのポインタの配列を扱う時は、必ず、最後にNULL
を付けてください。NULLが付加されていないと、暴走の原因になります。
4.関数の説明
簡略化EGBコールライブラリ
◆YGB_box
呼び出し形式
YGB_box(EGB_work,x0,y0,x1,y1);
char *EGB_work; /* EGBワークエリア */
int x0,y0; /* 端点座標1 */
int x1,y1; /* 端点座標2 */
機能
箱型を書く。ただし、中は塗りつぶされない
◆YGB_boxFul
呼び出し形式
YGB_boxFul(EGB_work,x0,y0,x1,y1);
char *EGB_work; /* EGBワークエリア */
int x0,y0; /* 端点座標1 */
int x1,y1; /* 端点座標2 */
機能
中が塗りつぶされた箱型を書く。
◆YGB_circle
呼び出し形式
YGB_circle(EGB_work,x,y,r);
char *EGB_work; /* EGBワークエリア */
int x,y; /* 中心座標 */
int r; /* 半径 */
機能
円を書きます。中は塗りつぶされません。
◆YGB_cls
呼び出し形式
YGB_cls(EGB_work);
char *EGB_work; /* EGBワークエリア */
機能
画面を消去します
◆YGB_color
呼び出し形式
YGB_color(EGB_work,cnum);
char *EGB_work; /* EGBワークエリア */
int cnum; /* 色識別番号 */
機能
色を指定します。cnumは、画面モードにかかわらず、0~65535の通し番
号です。
◆YGB_fontSize
呼出し形式
YGB_fontSize(EGB_work,fx,fy);
char *EGB_work; /* EGBワークエリア */
int fx,fy; /* フォントサイズ */
機能
フォントの大きさを指定します。拡張ライブラリIがある場合は、
YGB_use12dotFontをあらかじめ指定しておくことによって、12ドット
フォントを使用することができます。
◆YGB_frame
呼出し形式
YGB_frame(EGB_work,points);
char *EGB_work; /* EGBワークエリア */
int *points; /* 座標データ */
points[0] 座標数
points[1] 第1点X座標
points[2] 第1点Y座標
:
:
機能
多角形を書きます。ただし、中は塗り潰されません。
◆YGB_getColor
呼出し形式
cnum=YGB_getColor(EGB_work,x,y);
char *EGB_work; /* EGBワークエリア */
int x,y; /* 座標 */
戻り値
int cnum; /* 色識別番号 */
機能
座標x,yで示される点に表示されている色の色識別番号を得る関数です。色
識別番号は、15ビットで通知されます。
◆YGB_getPattern
呼出し形式
YGB_getPattern(EGB_work,dat,x1,y1,x2,y2);
char *EGB_work; /* EGBワークエリア */
char *dat; /* パターンデータ格納領域 */
int x1,y1,x2,y2; /* 取り込み領域 */
機能
画面に表示されているパターンデータを取り込みます。
◆YGB_init
呼出し形式
YGB_init(EGB_work,s0,s1);
char *EGB_work; /* EGB用ワークエリア */
int s0,s1; /* Page0画面モード,Page1画面モード */
機能
EGBを初期化し(中でEGB_initをコールしている)、s0,s1に従って、EGBの各値
を設定します。
◆YGB_initNoCls
呼出し形式
YGB_initNoCls(EGB_work,s0,s1);
char *EGB_work; /* EGB用ワークエリア */
int s0,s1; /* Page0画面モード,Page1画面モード */
機能
EGBを初期化し、s0,s1に従って、EGBの各値を設定します。ただし、画面は
クリアされません。
◆YGB_line
呼出し形式
YGB_line(EGB_work,x0,y0,x1,y1);
char *EGB_work; /* EGB用ワークエリア */
int x0,y0,x1,y1; /* 両端点 */
機能
端点(x0,y0)から(x1,y1)の間に直線を描きます。
◆YGB_linec
呼出し形式
YGB_linec(EGB_work,points);
char *EGB_work; /* EGB用ワークエリア */
int *points; /* 座標データ */
points[0]; /* 座標数 */
points[1]; /* x1 */
points[2]; /* y1 */
:
:
/* xn */
/* yn */
機能
座標データ(x1,y1),(x2,y2),....,(xn,yn)の間に直線を描きます。
◆YGB_lined
呼出し形式
YGB_lined(EGB_work,points);
char *EGB_work; /* EGB用ワークエリア */
int *points; /* 座標データ */
points[0]; /* 座標数 */
points[1]; /* x1 */
points[2]; /* y1 */
:
:
/* xn */
/* yn */
機能
座標データ(x1,y1)-(x2,y2)間,(x3,y3)-(x4,y4)間というように、奇数番目の
点とその次の点の間に直線を描きます。
◆YGB_polygon
呼出し形式
YGB_polygon(EGB_work,points);
char *EGB_work; /* EGB用ワークエリア */
int *points; /* 座標データ */
points[0]; /* 座標数 */
points[1]; /* x1 */
points[2]; /* y1 */
:
:
/* xn */
/* yn */
機能
座標データ(x1,y1),(x2,y2),.....,(xn,yn)で囲まれる多角系の中を塗りつ
ぶします。
◆YGB_popCondition
呼出し形式
YGB_popCondition(EGB_work,gc);
char *EGB_work; /* EGB用ワークエリア */
GC *gc; /* 退避してあった状態データ */
機能
YGB_pushConditionで退避した色,描画モード等の状態を再設定して、退避
してあったエリアを解放します。
◆YGB_print
呼出し形式
YGB_print(EGB_work,x,y,str);
char *EGB_work; /* EGB用ワークエリア */
int x,y; /* 表示する画面領域の左下端の座標 */
char *str; /* 表示する文字列 */
機能
文字を画面に表示します。YGB_use12dotFontで12dotFontの使用が設定され
いて、かつ、フォントサイズが6×12になっている場合は、システムの12dot
Fontが使われます。
◆YGB_pset
呼出し形式
YGB_pset(EGB_work,x,y);
char *EGB_work; /* EGB用ワークエリア */
int x,y; /* 点をうつ座標 */
機能
画面上に点を一つ描きます。
◆YGB_pushCondition
呼出し形式
gc=YGB_pushContidion();
戻り値
GC *gc; /* グラフィック描画状態保持バッファへのポインタ */
機能
この関数が呼び出された段階での描画モード、ビューポート等の設定を保存
します。保持バッファの領域は内部でmallocを呼び出して得ています。この
関数で保存された設定は、YGB_popConditionで復帰します。
◆YGB_putPattern
呼出し形式
YGB_putPattern(EGB_work,dat,x1,y1,x2,y2);
char *EGB_work; /* EGBワークエリア */
char *dat; /* パターンデータ格納領域 */
int x1,y1,x2,y2; /* 書き込み領域 */
機能
パターンデータを画面に書き込みます。
◆YGB_use12dotFont
呼出し形式
YGB_use12dotFont();
機能
システムの12ドットフォントの利用を可能にします。この関数が呼び出さ
れた後で、フォントのサイズを6×12に設定して、YGB_printを使って文字
を出すと、システムの12ドットフォントが使われます。なお、この関数を
利用するためには、拡張ライブラリIが必要です。
◆YGB_view
呼出し形式
YGB_view(EGB_work,x1,y1,x2,y2);
char *EGB_work; /* EGB用ワークエリア */
int x1,y1,x2,y2; /* ビューポート */
機能
画面の書き込み範囲を設定します。
◆YGB_writeMode
呼出し形式
YGB_writeMode(EGB_work,mode);
char *EGB_work; /* EGB用ワークエリア */
int mode; /* 書き込みモード */
機能
書き込みモードを設定します。モードには、 PSET,PRESET,OR,AND,XOR,NOT
,MATTE,PASTEL,OPAQUEが指定できます。それぞれの意味については、High-C
付属のCライブラリV2.1リファレンスを参照してください。
◆YGB_writePage
呼出し形式
YGB_writePage(EGB_work,page);
char *EGB_work; /* EGB用ワークエリア */
int page; /* 書き込みページ */
機能
書き込みページを指定します。
文字列操作関数
◆YSC_arguments
呼び出し形式
argc=YSC_arguments(line,argv,n);
char *line; /* 入力行 */
char *argv[]; /* パラメータへのポインタの配列 */
int n; /* argvに用意した配列の個数 */
戻り値
int argc; /* 得られたパラメータの個数 */
機能
入力行で与えられた文字列をスペースで区切られたパラメータに分解し、
その分解した各パラメータの先頭を*argv[] に格納します。例えば、文字
列lineが以下の内容だった場合の実行結果は、
<内容>
We love "Blue Impulse" .
<YSC_arguments実行結果>
argv[0] We
argv[1] love
argv[2] Blue Impulse
argv[3] .
と、なります。なお、この関数実行後は、lineの中身は破壊されますので
(スペースがあった部分が0になる)注意してください。
◆YSC_lineHead
呼び出し形式
head=YSC_lineHead(line);
char *line; /* 入力行 */
戻り値
char *head; /* 空白とTABをスキップした文字列の先頭位置 */
機能
文字列lineの先頭のスペースとTAB をスキップしたポインタをheadに返しま
す。headには、メモリ領域を確保するのではなく、文字列lineの先頭から最
後尾の間のどこかを指すポインタになります。
◆YSC_lineTail
呼び出し形式
head=YSC_lineTail(line);
char *line; /* 入力行 */
戻り値
char *head; /* lineと同じ値 */
機能
入力行が指す文字列の最後尾に空白またはTABがあった場合、それをカット
します。(最後尾の空白またはTABの並びの先頭に0を書き込む)
◆YSC_swap
呼び出し形式
YSC_swapInt(int *a,int *b);
YSC_swapChar(char *a,char *b);
YSC_swapPointer(void **a,void **b);
機能
整数値または文字またはポインタの値を交換します。なお、swapCharが交換
するのは、1文字であって、文字列ではありません。そこらのCの参考書に
必ず出ている交換関数です(^_^;)プログラム書く度にいちいち書き直すのが
面倒になったもんで(^_^;)でも、swapくらい、stdlibの中に入れてしまえば
いいと思いますよね。え、思いませんか?(^_^;)
ファイル操作関数
◆YSC_changeExt
呼び出し形式
YSC_changeExt(fname,ext);
char *fname; /* ファイル名 */
char *ext; /* 拡張子 */
機能
ファイル名の拡張子を変更します。拡張子が無い場合は、追加されることに
なります。従って、fnameには拡張子を入れるのに十分な余裕が必要です。
◆YSC_fsize
呼び出し形式
l=YSC_fsize(fp);
FILE *fp; /* ファイルポインタ */
戻り値
int l; /* ファイル長(バイト) */
機能
fpで示されるファイルの長さを返します。ファイルはオープンされている必
要があります。
◆YSC_getDosFiles
呼び出し形式
n=YSC_getDosFiles(fn,sd,mx,path,wc,bf);
int mx; /* 得るファイル名の最大個数(fnの配列個数) */
char *path; /* 検索するパス名(NULLならカレント) */
char *wc; /* ワイルドカード */
char *bf; /* ファイル名格納用の配列 */
戻り値
int n; /* 得られたファイル個数 */
char *fn[]; /* ファイル名へのポインタ */
char *sd; /* サブディレクトリフラグ */
機能
pathが指すディレクトリを検索し、見つかったファイル名をfn[0]~にセット
します。正確には、bfの中に、ファイル名を格納して、fn[0]~には、各ファ
イル名の先頭へのポインタをセットしています。従って、bfには、mxの13倍
の大きさの配列が必要です。("????????.???\0"の13文字のmx倍)なお、fn[n]
がファイルであった場合は、sd[n]に0が、サブディレクトリであった場合、
sd[n]に1がセットされます。
◆YSC_makeFullPath
呼び出し形式
YSC_makeFullPath(full,drv,path,fname);
unsigned drv; /* ドライブ番号 ドライブA=1 ドライブB=2… */
char *path; /* パス */
char *fname; /* ファイル名 */
戻り値
char *ful; /* フルパスファイル名 */
機能
ドライブ番号,パス,ファイル名からフルパスのファイル名を生成し、fulに
格納します。従って、fulにはフルパスのファイル名を格納するのに十分な
大きさが必要です。
◆YSC_putExt
呼び出し形式
YSC_putExt(fname,ext);
char *ext; /* 拡張子 */
戻り値
char *fname; /* ファイル名 */
機能
ファイル名に拡張子を付加します。従って、配列fnameには十分な余裕が
なくてはなりません。拡張子が既にある場合は、何もしません。
◆YSC_sortFiles
呼び出し形式
YSC_sortFiles(fn,sd,fs);
char *fn[]; /* ファイル名へのポインタの配列 */
char *sd; /* サブディレクトリフラグ */
int fs; /* ファイル個数 */
機能
fn[0]~で示されるファイル名をABC順に並べ換えます。各パラメーターの意味
は、YSC_getDosFilesのものと同じです。YSC_getDosFilesと組み合わせて使う
ことができます。なお、並べ換えはABC順に行われますが、サブディレクトリ
を先頭に持ってきます。
EUPHONY FILE 演奏用関数
◆YEU_abort
呼び出し形式
YEU_abort();
機能
演奏を中止します。
◆YEU_pause
呼び出し形式
YEU_pause();
機能
演奏を一時停止します。
◆YEU_percent
呼び出し形式
p=YEU_percent(eupdat);
char *eupdat; /* EUPデータへのポインタ */
戻り値
int p; /* 呼出しの時点で何割演奏したか(%) */
機能
この関数を呼び出した時点で演奏が終了した割合を%で通知します。
◆YEU_play
呼び出し形式
YEU_play(eupdat,loop);
char *eupdat; /* EUPデータへのポインタ */
int loop; /* 0:ループしない 1:ループする */
機能
eupdatが指すEUPデータを演奏します。eupdat~は、EUPファイルをfread
等でバイナリリードしたバッファです。また、loopに1をセットすると、
EUPファイルの最後まで来ると先頭に戻って自動的に繰り返して演奏しま
す。
◆YEU_playFlag();
呼び出し形式
f=YEU_playFlag();
戻り値
int f; /* 演奏中フラグ */
機能
演奏中であれば、fに0以外の数が返ります。
◆YEU_prepare
呼び出し形式
YEU_prepare(eupdat,loadFMB,loadPMB);
戻り値
char *eupdat; /* eupデータへのポインタ */
int loadFMB; /* FM音源音色ファイルロードフラッグ */
int loadPMB; /* PCM音源音色ファイルロードフラッグ */
機能
eupdatで示されるEUPデータを演奏するための設定を行います。YEU_play
を実行する前に必ず呼び出さなくてはなりません。loadFMB,loadPMBは、
設定と同時にFMBファイル/PMBファイルをロードするかどうかを指定する
ために使います。1ならばロードする、0ならばロードしない、です。
同じ音色を使っているEUPファイルを連続で演奏するような場合は0にし
た方がディスクのアクセスがなく、快適になります。
◆YEU_restart
呼び出し形式
YEU_restart();
機能
YEU_pauseで一時停止していた演奏を再開します。
GUI関数
◆YGU_addLateralbar
呼び出し形式
itm=YGU_addLateralbar(EGB_work,top,x,y,lx,ly,alln,dspn);
char *EGB_work; /* EGB用ワークエリア */
ITEM *top; /* ITEMリストの先頭へのポインタ(新規の場合はNULL) */
int x,y; /* スクロールバーの左上座標 */
int lx,ly; /* スクロールバーの幅 */
int alln; /* スクロールバーが表す集合の全体の大きさ */
int dspn; /* 全体のうち、表示される部分の大きさ */
戻り値
ITEM *itm; /* 登録されたスクロールバーへのポインタ */
機能
横のスクロールバーをITEMリストに登録します。新たにITEMリストを作成する
場合は、ITEMリストの先頭へのポインタにNULLを指定します。なお、この関数
が登録するのは横のスクロールバーで、横の長さが縦の長さの2倍以上ないと
登録に失敗します。登録に失敗した場合は、NULLを返します。
◆YGU_addLongitudinalbar
呼び出し形式
itm=YGU_addLongitudinalbar(EGB_work,top,x,y,lx,ly,allc,dspn);
char *EGB_work; /* EGB用ワークエリア */
ITEM *top; /* ITEMリストの先頭へのポインタ(新規の場合はNULL) */
int x,y; /* スクロールバーの左上座標 */
int lx,ly; /* スクロールバーの幅 */
int alln; /* スクロールバーが表す集合の全体の大きさ */
int dspn; /* 全体のうち、表示される部分の大きさ */
戻り値
ITEM *itm; /* 登録されたスクロールバーへのポインタ */
機能
縦のスクロールバーをITEMリストに登録します。新たにITEMリストを作成する
場合は、ITEMリストの先頭へのポインタにNULLを指定します。なお、この関数
が登録するのは縦のスクロールバーで、縦の長さが横の長さの2倍以上ないと
登録に失敗します。登録に失敗した場合は、NULLを返します。
◆YGU_addButton
呼び出し形式
itm=YGU_addButton(top,x,y,lx,ly);
ITEM *top; /* ITEMリスト先頭へのポインタ(新規の場合はNULL) */
int x,y; /* ボタンの左上座標 */
int lx,ly; /* ボタンの大きさ */
戻り値
ITEM *itm; /* 登録されたボタンへのポインタ */
機能
ボタンをITEMリストに登録します。新たにITEMリストを作成する場合は、top
にNULLを指定します。登録に失敗した時は、itmにNULLが返ります。
◆YGU_addButtonSwitch
呼び出し形式
itm=YGU_addButtonSwitch(top,x,y,lx,ly);
ITEM *top; /* ITEMリスト先頭へのポインタ(新規の場合はNULL) */
int x,y; /* ボタンの左上座標 */
int lx,ly; /* ボタンの大きさ */
戻り値
ITEM *itm; /* 登録されたボタンへのポインタ */
機能
スイッチ(押されるたびにOn/Offが切り替わる部品)をITEMリストに登録します。
新たにITEMリストを作成する場合は、topにNULLを指定します。登録に失敗した
時は、NULLが返ります。
◆YGU_addDialogue
呼び出し形式
itm=YGU_addDialogue(EGB_work,top,x,y,lx,ly,a,sw,fx,fy,sg);
char *EGB_work; /* EGB用ワークエリア */
ITEM *top; /* ITEMリストの先頭へのポインタ(新規の場合はNULL) */
int x,y; /* ダイアログの左上の座標 */
int lx,ly; /* ダイアログの大きさ */
char *a[]; /* 選択項目 */
char *sw; /* On/Off格納領域 */
int fx,fy; /* 選択項目表示用フォントサイズ */
int sg; /* 単一項目フラッグ */
戻り値
ITEM *itm;
機能
ダイアログをITEMリストに登録します。新たにITEMリストを作る場合は、top
にNULLを指定します。選択項目は、そのダイアログで選ぶ文字列の配列です。
swは、それぞれの文字列のうちのどれが選択されて、どれが選択されなかった
かを返すための配列で、選択項目の個数分の大きさが必要です。sgは、ひとつ
のみの選択か、複数項目の選択が可能かのフラッグで、1ならば単一、0なら
ば複数項目になります。単一指定されたダイアログでは、ユーザーがある一つ
の項目をマウスでクリックすると、他の項目は自動的にオフになります。また、
ダイアログでは、全体の項目数のうちの一部を画面に表示して、その中からい
くつかを選択するわけですが、画面に表示される個数は、自動的にly/fyにな
ります。
◆YGU_addMenu
呼び出し形式
itm=YGU_addMenu(EGB_work,top,x,y,lx,ly,a,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
ITEM *top; /* ITEMリストの先頭へのポインタ(新規の場合はNULL) */
int x,y; /* メニューの左上座標 */
int lx,ly; /* メニュー表示の大きさ */
char *a[]; /* 選択項目文字列へのポインタの配列 */
int fx,fy; /* フォントサイズ */
戻り値
ITEM *itm; /* 登録されたITEMへのポインタ */
機能
メニューをITEMリストに登録します。ITEMリストを新規作成する場合は、top
にNULLを指定します。
◆YGU_addPullDownMenu
呼び出し形式
itm=YGU_addPullDownMenu(top,x,y,lx,ly,a,px,py,fx,fy);
ITEM *top; /* ITEMリストの先頭へのポインタ(新規の場合はNULL) */
int x,y; /* メニューの左上座標 */
int lx,ly; /* メニュー表示の大きさ */
char *a[]; /* 選択項目文字列へのポインタの配列 */
int px,py; /* 開くメニューの左上座標 */
int fx,fy; /* フォントサイズ */
戻り値
ITEM *itm; /* 登録されたITEMへのポインタ */
機能
プルダウンメニュー(ポップアップメニュー)をITEMリストに登録します。新規
にITEMリストを作成する場合は、topにNULlを指定します。また、ポップアップ
メニューが開く位置は、そのメニューを開くボタンの位置とは関係なくpx,pyで
設定できます。
◆YGU_allItemsAction
呼び出し形式
itm=YGU_allItemsAction(EGB_work,top);
char *EGB_work; /* EGB用ワークエリア */
ITEM *top; /* 作動させるITEMリストの先頭へのポインタ */
戻り値
ITEM *itm; /* ユーザーの操作があったITEMへのポインタ */
機能
topで示されるITEMリストを作動させます。itmには、ユーザーがマウスで操作
したITEMへのポインタが返りますので、これを利用して、押されたボタンや、
プルダウンメニューを特定することができます。
◆YGU_buttonSwitchOff
呼び出し形式
YGU_buttonSwitchOff(EGB_work,btn);
char *EGB_work; /* EGB用ワークエリア */
ITEM *btn; /* オフにするスイッチへのポインタ */
機能
btnで示されるスイッチをオフにします。既にオフになっていた場合や、btnが
スイッチではなかった場合は何もしません。
◆YGU_buttonSwitchOn
呼び出し形式
YGU_buttonSwitchOn
char *EGB_work; /* EGB用ワークエリア */
ITEM *btn; /* オンにするスイッチへのポインタ */
機能
btnで示されるスイッチをオンにします。既にオンになっていた場合や、btnが
スイッチではなかった場合は何もしません。
◆YGU_checkDoubleClick
呼び出し形式
dc=YGU_checkDoubleClick();
戻り値
int dc; /* ダブルクリックフラッグ */
機能
ダブルクリックがあったかどうかをチェックします。直前のYGU_allItemsAction
にもとづいて判定しているため、ループの先頭でYGU_allItemsActionを呼びだ
していない部分では使用することは不可能です。
◆YGU_deleteAll
呼び出し形式
YGU_deleteAll(top);
ITEM *top; /* 削除するITEMリストの先頭へのポインタ */
機能
ITEMリストを削除して、使用していたメモリ領域を解放します。関数の中で
ITEMリストを作成していた場合は、関数を抜ける前に必ずこの関数で作成し
たITEMリストを削除しなくてはなりません。
◆YGU_deleteItem
呼び出し形式
YGU_deleteItem(itm);
ITEM *itm; /* 削除するITEMへのポインタ */
機能
itmで示されるITEMを削除します。それが属するITEMリストでは、itmで示され
るITEMが詰まることになります。
◆YGU_dispVector
呼び出し形式
YGU_dispVector(EGB_work,x,y,siz,ang);
char *EGB_work; /* EGB用ワークエリア */
int x,y; /* 矢印の左上座標 */
int siz; /* 矢印の大きさ */
int ang; /* 矢印の角度 */
機能
1辺がsizドットの箱型を書いて、その中に矢印を描きます。angには、0/90/180/
270が指定できます。0の時に上向きで、以下時計回りです。
◆YGU_getButton
呼び出し形式
on=YGU_getButton(btn);
ITEM *btn; /* オンオフを求めるボタンへのポインタ */
戻り値
int on; /* ボタン状態 0:Off 1:On */
機能
btnで示されるボタンの状態を調べます。これは、関数ではなく、#defineで
定義されているため、#include <ysuty2.h> がソースの先頭に書かれていな
い場合は使用できません。
◆YGU_getDialogue
呼び出し形式
n=YGU_getDialogue(dlg);
ITEM *dlg; /* 調べるダイアログへのポインタ */
戻り値
int n; /* 直前に変化のあった項目番号 */
機能
dlgが指すダイアログで最後に選択された項目の番号を得ます。もしも、何も
操作されていなければ0を返します。項目の一番先頭が選ばれた場合が1で
す。これは、#defineで定義されているため、#include <ysuty2.h> がソース
の先頭に書かれていない場合は使用できません。
◆YGU_getMenu
呼び出し形式
n=YGU_getMenu(mnu);
ITEM *mnu; /* 調べるメニューへのポインタ */
戻り値
int n; /* 直前に選ばれた項目番号 */
機能
mnuが指すメニューで最後に選択された項目の番号を得ます。もし、何も操作
されていなければ0を返します。項目の一番先頭が選ばれた場合が1です。
これは、#defineで定義されているため、#include <ysuty2.h> がソースの先
頭に書かれていない場合は使用できません。
◆YGU_getPullDown
呼び出し形式
n=YGU_getPullDown(pdm);
ITEM *pdm; /* 調べるプルダウンメニューへのポインタ */
戻り値
int n; /* 直前に選ばれた項目番号 */
機能
pdmが指すプルダウンメニューで直前に選ばれた項目番号を返します。何も操
作が無かった場合は、0を返します。項目の一番先頭が選ばれていた場合は、
1を返します。
◆YGU_getScrollBarPointer
呼び出し形式
ptr=YGU_getScrollBarPointer(bar);
ITEM *bar; /* 調べるスクロールバーへのポインタ */
戻り値
int ptr; /* スクロールバーの位置 */
機能
barが指すスクロールバーの位置を返します。縦スクロールバーでも、横スク
ロールバーでも構いません。なお、これは、#defineで定義されているので、
ソースリストの先頭に、#include <ysuty2.h>を書いていないと使えません。
◆YGU_getSwitch
呼び出し形式
on=YGU_getSwitch(swt);
ITEM *swt; /* 調べるスイッチへのポインタ */
戻り値
int on; /* ボタン状態 0:Off 1:On */
機能
スイッチの状態を調べます。なお、これは、#defineで定義されているので、
ソースリストの先頭に#include <ysuty2.h> を書いていないと使えません。
◆YGU_itemSerialNumber
呼び出し形式
n=YGU_itemSerialNumber(top,itm);
ITEM *top; /* itmが属するITEMリストの先頭 */
ITEM *itm; /* 番号を調べるITEM */
戻り値
int n; /* itmの通し番号 */
機能
itmがITEMリスト中で何番目のアイテムであるかを調べます。もしも、itmが
リスト中に含まれていなければ0番を返します。itmがリスト中の先頭のITEM
であった場合は、1が返ります。
◆YGU_menuBox
呼び出し形式
YGU_menuBox(EGB_work,x1,y1,x2,y2);
char *EGB_work; /* EGB用ワークエリア */
int x1,y1,x2,y2; /* 箱型の左上座標,右下座標 */
機能
縁取りされた箱型を描きます。
◆YGU_menuLine
呼び出し形式
YGU_menuLine(EGB_work,msg,x,y,lx,ly,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
char *msg; /* 表示するメッセージ */
int x,y; /* 表示する領域の左上座標 */
int lx,ly; /* 表示する領域の大きさ */
int fx,fy; /* フォントサイズ */
機能
縁取りされた箱型を書いて、その中に文字列msgを描きます。
◆YGU_nextItem
呼び出し形式
nxt=YGU_nextItem(itm);
ITEM *itm; /* 元になるアイテム */
戻り値
ITEM *nxt; /* リスト中でitmの次にあるITEM */
機能
アイテムリスト中で、itmに続くITEMを求めます。これは、#defineで定義され
ているため、ysuty2.hをソースリストの先頭でインクルードしていないと、使
用できません。
◆YGU_popScreenBlock
呼び出し形式
YGU_popScreenBlock(EGB_work,pushBuf);
char *EGB_work; /* EGB用ワークエリア */
char *pushBuf; /* 画面を退避してあるバッファ */
機能
YGU_pushScreenBlockで退避した画面領域を復元します。
◆YGU_pushScreenBlock
呼び出し形式
pushBuf=YGU_pushScreenBlock(EGB_work,x,y,lx,ly);
char *EGB_work; /* EGB用ワークエリア */
int x,y; /* 退避する領域の左上座標 */
int lx,ly; /* 退避する領域の大きさ */
戻り値
char *pushBuf; /* 画面を退避してあるバッファ */
機能
画面領域を退避して、退避した情報へのポインタを返します。メモリは内部
でmallocで確保しています。退避した画面領域は、YGU_popScreenBlockで復
元されます。
◆YGU_previousItem
呼び出し形式
prv=YGU_previousItem(itm);
ITEM *itm; /* 元になるアイテムへのポインタ */
戻り値
ITEM *prv; /* リスト中でitmの直前にあるITEMへのポインタ */
機能
ITEMリスト中で、itmの直前のITEMへのポインタを返します。これは、#define
で定義されているため、ソースの先頭に、#include <ysuty2.h> が書かれてい
ない場合は使用できません。
◆YGU_repaintDialogue
呼び出し形式
YGU_repaintDialogue(EGB_work,dlg);
char *EGB_work; /* EGB用ワークエリア */
ITEM *dlg; /* 書換えるダイアログへのポインタ */
機能
画面の書換え等でダイアログの表示が崩れた場合等に、ダイアログを書き直
します。このライブラリを通常の使用状態で使っている時には必要ありませ
ん。
◆YGU_resetDialogue
呼び出し形式
YGU_resetDialogue(EGB_work,dlg,a,sw);
char *EGB_work; /* EGB用ワークエリア */
ITEM *dlg; /* 値を最設定するダイアログへのポインタ */
char *a[]; /* 選択項目 */
char *sw; /* On/Off格納領域 */
機能
ダイアログの選択項目を再設定して、書き直します。
◆YGU_resetScrollBar
呼び出し形式
YGU_resetScrollBar(EGB_work,bar,int alln,int dspn);
char *EGB_work; /* EGB用ワークエリア */
ITEM *bar; /* 再設定するスクロールバーへのポインタ */
int alln; /* スクロールバーが表す集合の全体の大きさ */
int dspn; /* 全体のうち、表示される部分の大きさ */
機能
スクロールバーのパラメーターを再設定して、書き直します。
◆YGU_screenMode
呼び出し形式
s=YGU_screenMode(EGB_work);
char *EGB_work; /* EGB用ワークエリア */
戻り値
int s; /* 現在の書き込みページのスクリーンモード */
機能
この関数が呼ばれた時点の書き込みページのスクリーンモードを返します。
◆YGU_setDialoguePointer
呼び出し形式
YGU_setDialoguePointer(EGB_work,dlg,newptr);
char *EGB_work; /* EGB用ワークエリア */
ITEM *dlg; /* 変更するダイアログへのポインタ */
int newptr; /* 再設定する値 */
機能
ダイアログの選択項目のうちのどこからを画面に表示するかを変更します。
スクロールバーと連動させる時などに使います。
◆YGU_setScrollBarPointer
呼び出し形式
YGU_setScrollBarPointer(EGB_work,bar,newptr);
char *EGB_work; /* EGB用ワークエリア */
ITEM *bar; /* 変更するスクロールバーへのポインタ */
int newptr; /* 再設定する値 */
機能
スクロールバーのカーソル位置を変更します。普通にこのライブラリを使っ
ている分にはこの関数は必要ありません。
拡張GUIライブラリ
◆YGU_intInput
呼び出し形式
n=YGU_intInput(EGB_work,mes,mx,mn,df,x,y,lx,ly,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
char *mes; /* 表示メッセージ */
int mx,mn; /* 入力する値の最大値,最小値 */
int df; /* 入力する値のデフォルト値 */
int x,y; /* 入力ウィンドウの左上座標 */
int lx,ly; /* 入力ウィンドウの大きさ */
int fx,fy; /* フォントの大きさ */
戻り値
int n; /* 入力された値 */
機能
マウスまたはキーボードから整数値を入力します。キーボードから整数値を
入力するには、入力ウィンドウ中で数字が表示されている部分をクリックし
ます。
◆YGU_lineInput
呼び出し形式
YGU_lineInput(EGB_work,lin,len,x,y,lx,ly,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
char *lin; /* 入力バッファ */
int len; /* 入力文字列の最大長 */
int x,y; /* 入力ウィンドウの左上座標 */
int lx,ly; /* 入力ウィンドウの大きさ */
int fx,fy; /* フォントの大きさ */
戻り値
char *lin; /* 入力バッファ */
機能
キーボードから1行入力します。この関数は、linになんらかの文字列がある
場合は、それを変更するようになっているので、全く新たに1行入力する場合
でも、lin[0]に0を書いておかなくてはなりません。なお、この関数では漢字
の入力はできません。
◆YGU_lineInputKanji
呼び出し形式
YGU_lineInputKanji(EGB_work,lin,len,x,y,lx,ly,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
char *lin; /* 入力バッファ */
int len; /* 入力文字列の最大長 */
int x,y; /* 入力ウィンドウの左上座標 */
int lx,ly; /* 入力ウィンドウの大きさ */
int fx,fy; /* フォントの大きさ */
戻り値
char *lin; /* 入力バッファ */
機能
キーボードから1行入力します。この関数は、linになんらかの文字列がある
場合は、それを変更するようになっているので、全く新たに1行入力する場合
でも、lin[0]に0を書いておかなくてはなりません。なお、この関数では漢字
の入力も可能ですが、拡張ライブラリIが必要です。
◆YGU_fileSelect
呼び出し形式
n=YGU_fileSelect(EGB_work,msg,&drv,path,fn,wld,x,y,lx,ly,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
char *msg; /* 表示メッセージ */
unsigned drv; /* ドライブ番号格納用 */
char *path; /* パス名格納領域 */
char *fn; /* ファイル名格納領域 */
char *wld; /* ワイルドカード */
int x,y; /* 入力ウィンドウの左上座標 */
int lx,ly; /* 入力ウィンドウの大きさ */
int fx,fy; /* フォントの大きさ */
戻り値
int n; /* ファイルが入力された→1 されなかった→0 */
機能
ファイルダイアログを開いて、ファイル名を1個入力します。pathには64文
字,fnには12文字分の領域を確保しておく必要があります。また、path,fn,
drvは初期化しておかなくてはなりません。もしも、カレントドライブのカ
レントディレクトリから探す場合は、fn[0]=0; path[0]=0; drv=0;としてお
きます。なお、この関数は現時点では、同じディレクトリに256個以上のフ
ァイルがあるとそれ以上のファイルを無視してしまいます。普段からディレ
クトリは整理するようにしましょう(^_^;)
◆YGU_paraFileSelect
呼び出し形式
n=YGU_paraFileSelect(EGB_work,msg,mx,&drv,path,fn,b,wl,x,y,lx,ly,fx,fy);
char *EGB_work; /* EGB用ワークエリア */
char *msg; /* 表示メッセージ */
int mx; /* 最大何個のファイルを選ぶか */
unsigned drv; /* ドライブ番号格納用 */
char *path; /* パス名格納領域 */
char *fn[]; /* ファイル名へのポインタ */
char *b; /* ファイル名展開バッファ(256×13バイト必要) */
char *wl; /* ワイルドカード */
int x,y; /* 入力ウィンドウの左上座標 */
int lx,ly; /* 入力ウィンドウの大きさ */
int fx,fy; /* フォントの大きさ */
戻り値
int n; /* 選ばれたファイル数 */
機能
ファイルダイアログを開いて、複数のファイルを選択して、選ばれたファイ
ル数を返します。ファイル名は、文字配列 fn[0]~fn[n-1] で参照できます。
なお、この関数は現時点では、同じディレクトリに256個以上のファイルが
あるとそれ以上のファイルを無視してしまいます。普段からディレクトリは
整理するようにしましょう(^_^;)
GUI/拡張GUIライブラリでの考えられるトラブルについて
◆スクロールバーがでない
縦横のサイズが極端に正方形に近い場合はYGU_addLongitudinalbar /
YGU_addLateralbarはNULLを返す。
◆プルダウンメニューが開かない
メモリが不足で、プルダウンメニュー表示部に対して十分な画面退避
バッファが確保できない場合はプルダウンメニューが開かない。
◆FileSelectorが誤動作する/ハングする
pathには64バイト fnには13バイト以上のスペースが必要。drvとpathと
fnは呼出し側で初期化しなくてはならない。カレントディレクトリから
選択を開始する場合は、path[0]=0; としておく。また、fnの初期状態が
"DUMMY.DAT"の場合は、char fn[13]; strcpy(fn,"DUMMY.DAT");を実行
しておかなくてはならない。また、カレントドライブから選択を開始
する場合は、drv=0;としておく。その他の注意としては、lx,lyが、フォ
ントの大きさに対して、あまりにも小さい時は、画面が崩れる可能性が
ある。ディレクトリ上に256個以上のファイルがある場合も正常に動作
しない。